package java_DesignPattern.SixPrinciple.LiskovSubstitutionPrinciple.fault;

/**
 * 里氏代换原则测试代码
 * 即父类可以出现并实现的逻辑,可以被子类完全替代.子类在不能破坏父类原有逻辑的基础上的逻辑,但可以对拓展开放
 * 不符合里氏代换原则的情况
 */
public class Test {

    public static void main(String[] args) {
        //初始化长方形对象
        Rectangle rectangle = new Rectangle();
        rectangle.setLen(20);
        rectangle.setWidth(10);
        //拓宽
        resize(rectangle);
        logLenAndWidth(rectangle);

        System.out.println("==================");

        //初始化正方形对象
        Square square = new Square();
        square.setLen(10);
        //拓宽
        resize(square);
        logLenAndWidth(square);
    }

    //拓宽方法
    public static void resize(Rectangle rectangle){

        while (rectangle.getWidth() <= rectangle.getLen()){
            rectangle.setWidth(rectangle.getWidth() + 1);
        }
    }

    //输出长宽方法
    public static void logLenAndWidth(Rectangle rectangle){
        System.out.println("len ="+rectangle.getLen()+" : width ="+rectangle.getWidth());
    }
}
